package org.alex.nettychat.netty.custom.handler;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.ByteToMessageDecoder;
import org.alex.nettychat.netty.custom.protocol.PacketCodeC;

import java.util.List;

/**
 * 值得注意的是，对于Netty里的ByteBuf，
 * 我们使用4.1.6.Final版本，默认情况下用的是堆外内存。
 * 在ByteBuf一章中提到，堆外内存需要我们自行释放，
 * 在解码的例子中，其实我们已经漏掉了这个操作，
 * 这一点是非常致命的。随着程序运行得越来越久，
 * 内存泄漏的问题就慢慢暴露出来了，
 * 而这里我们使用ByteToMessageDecoder，Netty会自动进行内存的释放，
 * 我们不用操心太多的内存管理方面的逻辑。
 * @author : alex
 */
public class PacketDecoder extends ByteToMessageDecoder {
    @Override
    protected void decode(ChannelHandlerContext channelHandlerContext, ByteBuf byteBuf, List<Object> list) throws Exception {
        list.add(PacketCodeC.INSTANCE.decode(byteBuf));
    }
}
